Enviando e-mails com PL/SQL em Bancos de Dados Oracle - Parte 2
Por Fabio Prado ,
Publicado en Outubro 2013
Dando continuidade ao artigo Enviando e-mails com PL/SQL em Bancos de Dados Oracle, irei compartilhar nesta 2a. parte, uma package chamada PKG_ENVIA_EMAIL, que eu desenvolvi para facilitar o trabalho de envio de e-mails com ou sem anexo. Essa package internamente utiliza a package UTL_MAIL para enviar mensagens sem anexo e a package UTL_SMTP para enviar mensagens com anexo do tipo texto. Ela foi criada como o objetivo didático de demonstrar o uso das 2 packages de envio de e-mail e pode ser utilizada para padronizar e facilitar o envio de e-mails com anexos maiores que 32K através do uso da package UTL_SMTP, pois não é muito fácil utilizá-la para essa finalidade (para mais informações sobre este assunto, leia a 1a. parte do artigo).
A package PKG_ENVIA_EMAIL pode ser instalada e utilizada em qualquer schema de usuário de um SGBD Oracle, desde que sejam atendidos os pré-requisitos especificados na 1a. parte deste artigo. Ela contém 1 função e 2 stored procedures, conforme descrições abaixo:
- FC_GERAR_ARRAY_STRING:
Função privada que permite gerar array para separar destinatários e enviar o e-mail para múltiplos destinatários, quando necessário.
- SP_ENVIAR_EMAIL:
Stored Procedure pública que pode ser utilizada para enviar e-mails sem anexo. Utiliza internamente a package UTL_MAIL.
- SP_ENVIAR_EMAIL_COM_ANEXO:
Stored Procedure pública que pode ser utilizada para enviar e-mails COM anexo do tipo texto. Utiliza internamente a package UTL_SMTP e permite enviar somente 1 anexo por e-mail.
É importante ressaltar que as procedures dessa package só podem ser utilizadas para enviar 2 tipos de e-mail: sem anexo ou com 1 anexo do tipo texto. Se você precisar mandar mais de 1 anexo do tipo texto ou outros tipos de anexos, tais como arquivos de vídeo ou som, consulte a documentação oficial da Oracle para criar nova(s) procedure(s) com sobrecarga dentro da package PKG_ENVIA_EMAIL, incluindo o código necessário para executar essas tarefas.
Para enviar um e-mail sem anexo, execute a stored procedure SP_ENVIAR_EMAIL, como no exemplo abaixo, substituindo os valores para os parâmetros:
BEGIN
PKG_ENVIA_EMAIL.SP_ENVIAR_EMAIL (P_ASSUNTO => 'Assunto do e-mail',
P_MSG => 'Mensagem',
P_EMAIL_ORIGEM => 'oracle@oracle.com',
P_EMAIL_DESTINO => 'fbifabio@gmail.com,
jack@oracle.com',
P_EMAIL_CC_DESTINO => 'ze@oracle.com,
jo@oracle.com', P_EMAIL_CCO_DESTINO => null);
END;
Para enviar um e-mail com 1 anexo do tipo texto, execute a stored procedure SP_ENVIAR_EMAIL_COM_ANEXO, como no exemplo abaixo:
DECLARE
v_CLOB CLOB;
BEGIN
PKG_ENVIA_EMAIL.SP_ENVIAR_EMAIL_COM_ANEXO (P_ASSUNTO => 'Assunto do e-mail',
P_MSG => 'Mensagem',
P_EMAIL_ORIGEM => 'oracle@oracle.com',
P_EMAIL_DESTINO => 'fbifabio@gmail.com,
jack@oracle.com',
P_EMAIL_CC_DESTINO => 'ze@oracle.com,
jo@oracle.com',
P_EMAIL_CCO_DESTINO => null,
P_FILENAME => 'arquivo.txt',
P_ANEXO => v_CLOB, -- variável CLOB c/ texto do arquivo
P_ATTACH_MIME => 'text/plain; charset=iso-8859-1',
P_SMTP_SERVER => 'smtp.oracle.com.br',
P_SMTP_PORT => 25);
END;
Postado por Fabio Prado.